-- 添加 自定义 test 配置选项
option("test")
    set_default(n)                      -- 默认关闭
    set_showmenu(true)                      -- 让它在 `xmake f --menu` 中可见
    set_description("Enable test targets")  -- 可选：描述信息
option_end()
add_requires("gtest", { configs = { main = true } })
-- 设置系统最小版本
if is_plat("macosx") then
    add_cxflags("-mmacosx-version-min=15.2", { force = true })
    add_ldflags("-mmacosx-version-min=15.2", { force = true })
end

--添加测试规则
rule("module.test")
    on_load(function (target)
        -- 没有开启 test 选项，就关闭 target
        if not has_config("test") then
            target:set("enabled", false )
            return
        end
        -- 运行目录修改为根目录
        target:set("rundir", os.projectdir() .. "/test") -- 拼接字符串
        -- 添加测试组
        target:set("group", "test")
        -- 引入 gtest
        target:add("packages", "gtest")
        target:add("packages", "fmt")
        target:add("deps", "base")
     
    end)

-- 假设 test 目录下每个 cpp 文件都有自己的 main 函数
for _, file in ipairs(os.files("*.cpp")) do
    local name = path.basename(file)
    target("test." .. name)
        add_rules("module.test")
        set_kind("binary")
        set_default()
        add_files(file)

    target_end()
end 

-- 添加测试任务
task("test_self")
    on_run(function ()
        os.exec("xmake f -m debug --test=y")
        os.exec("xmake build -g test")
        os.exec("xmake run -g test")
    end)

    set_menu{
        usage = "xmake test_self",
        description = "Run all test targets",
        options = {}
    }